use std::path::Path;

use std::io;


///! 修改整体的项目结构而做的临时工具
/// 作用是扫描所有的文件并写入cargo文件中

fn scan_all_file_in_dir(dir: &Path) -> io::Result<()> {
    let last_dir = dir.file_name().unwrap().to_str().unwrap();
    println!("# {}主题", last_dir);
    if dir.is_dir() {
        for entry in dir.read_dir()? {
            let entry = entry?;
            let metadata = entry.metadata()?;
            if metadata.is_dir() {
                // 如果是文件夹递归
                scan_all_file_in_dir(entry.path().as_path())?;
            } else {
                // 如果是文件，扫描出名字后加入buffer
                // 获取文件路径
                let file_name = entry.file_name();
                let mut name = file_name.into_string().unwrap();
                name.truncate(name.len() - 3);
                // 生成要输入的格式
                let msg = format!("[[bin]]\nname=\"{}\"\npath=\"./src/{}/{}.rs\"\n",
                                  name, last_dir, name);
                println!("{}", msg);
                // 插入buffer
            }
        }
    } else {
        panic!("非文件夹");
    }
    Ok(())
}


fn main() {
    let a = env!("CARGO_MANIFEST_DIR");
    let b = format!("{}/{}", a, "src");
    let path = Path::new(b.as_str());
    scan_all_file_in_dir(&path).expect("扫描出错");
}
